// // import Cell from "../Main/Cell";
// // import AssetManager from "../Manager/AssetManager";
// // import AudioManager from "../Manager/AudioManager";
// // import DataManager from "../Manager/DataManager";
// // import GameManager from "../Manager/GameManager";
// // import MapManager from "../Manager/MapManager";
// // import DropItemPanel from "../UI/DropItemPanel";
// // import GamePlayPanel from "../UI/GamePlayPanel";
// // import SpecialEventPanel from "../UI/SpecialEventPanel";
// import TipPanel from "../UI/TipPanel";
// import { randomRangeInt } from "../utils/ccUtils";
// import ElementFunction from "./ElementFunction";
// import ShuaiAPI from "./ShuaiAPI";
// // import { CellState, DayNightState, ElementType, GameState } from "./ShuaiEnum";
// import ShuaiFunction from "./ShuaiFunction";

// export default class GamePlayFunction {
//     //生成一个Cell
//     // 类型 攻击 防御 血量 位置
//     public static CreateCell(_x: number, _y: number, _width: number, _elementType: ElementType, _isNew: boolean, _ATK: number, _DEF: number, _HP: number, _minHP: number, _maxHP: number, _level: number): Cell {
//         GamePlayFunction.ClearOneCell(_x, _y);

//         let node: cc.Node = cc.instantiate(AssetManager.Instance.prefab_cell);
//         node.parent = GameManager.Instance.Root_2D;
//         let cell: Cell = node.getComponent(Cell);
//         cell.Init(_x, _y, _width, _elementType, _isNew, _ATK, _DEF, _HP, _minHP, _maxHP, _level);
//         MapManager.Instance.cellList[_x][_y] = cell;

//         return cell;
//     }

//     //生成一个空Cell
//     public static CreateEmptyCell(_x: number, _y: number, _width: number): Cell {
//         // GamePlayFunction.ClearOneCell(_x, _y);

//         let node: cc.Node = cc.instantiate(AssetManager.Instance.prefab_cell);
//         node.parent = GameManager.Instance.Root_2D;
//         let cell: Cell = node.getComponent(Cell);
//         cell.cellState = CellState.Empty;
//         MapManager.Instance.cellList[_x][_y] = cell;
//         cell.InitEmptyOrWallCell(_x, _y, _width, CellState.Empty);

//         return cell;
//     }

//     //生成一个墙Cell
//     public static CreateWallCell(_x: number, _y: number, _width: number): Cell {
//         // GamePlayFunction.ClearOneCell(_x, _y);

//         let node: cc.Node = cc.instantiate(AssetManager.Instance.prefab_cell);
//         node.parent = GameManager.Instance.Root_2D;
//         let cell: Cell = node.getComponent(Cell);
//         cell.cellState = CellState.Wall;
//         MapManager.Instance.cellList[_x][_y] = cell;
//         cell.InitEmptyOrWallCell(_x, _y, _width, CellState.Wall);

//         return cell;
//     }

//     // 随机生成Item类型Cell
//     public static CreateOneRandomItemCell(_x: number = null, _y: number = null): Cell {
//         if (_x == null) {
//             _x = ShuaiFunction.GetRandomNumber(MapManager.Instance.col_start, MapManager.Instance.col_start + MapManager.Instance.col - 1);
//         }
//         if (_y == null) {
//             _y = ShuaiFunction.GetRandomNumber(MapManager.Instance.row_start, MapManager.Instance.row_start + MapManager.Instance.row - 1);
//         }

//         let data =
//         {
//             x: _x,
//             y: _y,
//             width: MapManager.Instance.cellWidth,
//             elementType: ShuaiFunction.GetRandomNumber(0, 2),
//             isNew: true,
//             ATK: 2,
//             DEF: 2,
//             HP: 2,
//             minHP: 0,
//             maxHP: 0,
//             level: 1,
//         }
//         let cell = GamePlayFunction.CreateCell(data.x, data.y, data.width, data.elementType, data.isNew, data.ATK, data.DEF, data.HP, data.minHP, data.maxHP, data.level);

//         return cell;
//     }

//     // 新生成敌人
//     public static CreateEnemy(_x: number = null, _y: number = null, _level: number): Cell {
//         GameManager.Instance.isEnemyCreate = true;

//         if (_x == null) {
//             _x = ShuaiFunction.GetRandomNumber(MapManager.Instance.col_start, MapManager.Instance.col_start + MapManager.Instance.col - 1);
//         }
//         if (_y == null) {
//             _y = ShuaiFunction.GetRandomNumber(MapManager.Instance.row_start, MapManager.Instance.row_start + MapManager.Instance.row - 1);
//         }

//         let minAndMaxHp = ElementFunction.GetMonsterMinHPAndMaxHp(_level);
//         let HP;
//         // boss
//         if (_level >= 5) {
//             HP = minAndMaxHp.maxHP;
//             AudioManager.Instance.bossCreate.play();
//         }
//         // 小怪
//         else {
//             HP = ShuaiFunction.GetRandomNumber(minAndMaxHp.minHP + 5, minAndMaxHp.maxHP);
//             AudioManager.Instance.monsterCreate.play();
//         }
//         let data =
//         {
//             x: _x,
//             y: _y,
//             width: MapManager.Instance.cellWidth,
//             elementType: ElementType.Enemy,
//             isNew: true,
//             ATK: 1,
//             DEF: 0,
//             HP: HP,
//             minHP: minAndMaxHp.minHP,
//             maxHP: minAndMaxHp.maxHP,
//             level: _level,
//         }
//         let cell = GamePlayFunction.CreateCell(data.x, data.y, data.width, data.elementType, data.isNew, data.ATK, data.DEF, data.HP, data.minHP, data.maxHP, data.level);

//         return cell;
//     }

//     public static CreatePlayer() {
//         let data =
//         {
//             x: ShuaiFunction.GetRandomNumber(MapManager.Instance.col_start, MapManager.Instance.col_start + MapManager.Instance.col - 1),
//             y: ShuaiFunction.GetRandomNumber(MapManager.Instance.row_start, MapManager.Instance.row_start + MapManager.Instance.row - 1),
//             width: MapManager.Instance.cellWidth,
//             elementType: ElementType.Player,
//             isNew: true,
//             ATK: 1,
//             DEF: 0,
//             HP: 10,
//             minHP: 1,
//             maxHP: 10,
//             level: 1,
//         }
//         let cell = GamePlayFunction.CreateCell(data.x, data.y, data.width, data.elementType, data.isNew, data.ATK, data.DEF, data.HP, data.minHP, data.maxHP, data.level);
//     }

//     //清除一个格子
//     public static ClearOneCell(_x: number, _y: number) {
//         let cell: Cell = MapManager.Instance.cellList[_x][_y];
//         if (cell && cell.node) {
//             cell.node.destroy();
//         }
//         MapManager.Instance.cellList[_x][_y] = null;
//     }

//     //清除所有格子
//     public static ClearAllCell() {
//         if (MapManager.Instance.cellList && MapManager.Instance.cellList.length > 0) {
//             for (let x = MapManager.Instance.col_start; x <= MapManager.Instance.col_start + MapManager.Instance.col - 1; x++) {
//                 for (let y = MapManager.Instance.row_start; y <= MapManager.Instance.row_start + MapManager.Instance.row - 1; y++) {
//                     GamePlayFunction.ClearOneCell(x, y);
//                 }
//             }
//         }
//     }

//     //填满所有空地格子
//     public static CreateAllEmptyCell() {
//         for (let x = MapManager.Instance.col_start; x <= MapManager.Instance.col_start + MapManager.Instance.col - 1; x++) {
//             for (let y = MapManager.Instance.row_start; y <= MapManager.Instance.row_start + MapManager.Instance.row - 1; y++) {
//                 GamePlayFunction.CreateEmptyCell(x, y, MapManager.Instance.cellWidth);
//             }
//         }
//     }

//     // 随机一个小类型
//     public static RandomElementType(): ElementType {
//         let elementType: ElementType = ShuaiFunction.GetRandomNumber(0, 4);
//         return elementType;
//     }

//     // 操作滑动
//     public static OperateSlide(_direction: cc.Vec2) {
//         console.log(`滑动`)
//         // 正在滑动中
//         // if (GameManager.Instance.isSlide == true) {
//         //     return;
//         // }

//         // // 不在Play状态
//         // if (GameManager.Instance.gameState != GameState.Play) {
//         //     return;
//         // }

//         // // 昼夜切换弹框弹出
//         // if (GameManager.Instance.dayNightState == DayNightState.Day2Night || GameManager.Instance.dayNightState == DayNightState.Night2Day) {
//         //     // SpecialEventPanel.Instance.On_Button_main();
//         //     return;
//         // }

//         GamePlayFunction.StartMoveCells(_direction);
//     }

//     //开始移动格子
//     public static StartMoveCells(_direction: cc.Vec2) {
//         // TipPanel.Instance.Show('滑动开始~~~');
//         GameManager.Instance.isSlide = true;
//         GameManager.Instance.direction = _direction;
//         GameManager.Instance.actionNumber = 0;
//         GameManager.Instance.battleNumber = 0;
//         GameManager.Instance.actionNumber_static = 0;

//         GameManager.Instance.newNumber = 0;

//         GameManager.Instance.isLastStep = true;
//         GameManager.Instance.isEnemyCreate = false;
//         GameManager.Instance.isBossCreate = false;

//         GamePlayFunction.ResetAllCells();

//         GamePlayFunction.MoveCells(_direction);

//         AudioManager.Instance.woosh.play();
//         AudioManager.Instance.woosh.volume = 0.2;
//     }

//     //移动格子
//     public static async MoveCells(_direction: cc.Vec2) {
//         // let startIndex: number = 0;
//         // let endIndex: number = 0;
//         // let add: number = 1;
//         // if (_direction == ShuaiAPI.Vec2.UP) {
//         //     startIndex = MapManager.Instance.row_start + MapManager.Instance.row - 1;
//         //     endIndex = MapManager.Instance.row_start;
//         //     add = -1;
//         // }
//         // else if (_direction == ShuaiAPI.Vec2.DOWN) {
//         //     startIndex = MapManager.Instance.row_start;
//         //     endIndex = MapManager.Instance.row_start + MapManager.Instance.row - 1;
//         //     add = +1;
//         // }
//         // else if (_direction == ShuaiAPI.Vec2.LEFT) {
//         //     startIndex = MapManager.Instance.col_start;
//         //     endIndex = MapManager.Instance.col_start + MapManager.Instance.col - 1;
//         //     add = +1;
//         // }
//         // else if (_direction == ShuaiAPI.Vec2.RIGHT) {
//         //     startIndex = MapManager.Instance.col_start + MapManager.Instance.col - 1;
//         //     endIndex = MapManager.Instance.col_start;
//         //     add = -1;
//         // }

//         // for (let i = MapManager.Instance.col_start; i <= MapManager.Instance.col_start + MapManager.Instance.col - 1; i++) {
//         // // for (let i = MapManager.Instance.col_start + MapManager.Instance.col - 1; i >= MapManager.Instance.col_start; i--) {
//         //     // let i = 1;
//         //     // for (let i = 0; i <= 3; i++) {

//         //     let cell: Cell = (_direction == ShuaiAPI.Vec2.LEFT || _direction == ShuaiAPI.Vec2.RIGHT) ? MapManager.Instance.cellList[startIndex][i] : MapManager.Instance.cellList[i][startIndex];
//         //     if (cell && cell.node) {
//         //         console.log(cell);

//         //         cell.Do(_direction);
//         //     }
//         // }

//         if (_direction == ShuaiAPI.Vec2.LEFT || _direction == ShuaiAPI.Vec2.DOWN) {
//             for (let i = 1; i <= 4; i++) {
//                 for (let j = 1; j <= 4; j++) {
//                     let cell: Cell = (_direction == ShuaiAPI.Vec2.LEFT || _direction == ShuaiAPI.Vec2.RIGHT) ? MapManager.Instance.cellList[j][i] : MapManager.Instance.cellList[i][j];
//                     if (cell && cell.node) {
//                         // console.log(cell);

//                         cell.Do(_direction);
//                     }
//                 }
//             }
//         }
//         else {
//             for (let i = 4; i >= 1; i--) {
//                 for (let j = 4; j >= 1; j--) {
//                     let cell: Cell = (_direction == ShuaiAPI.Vec2.LEFT || _direction == ShuaiAPI.Vec2.RIGHT) ? MapManager.Instance.cellList[j][i] : MapManager.Instance.cellList[i][j];
//                     if (cell && cell.node) {
//                         // console.log(cell);

//                         cell.Do(_direction);
//                     }
//                 }
//             }
//         }

//         await GameManager.Instance.AwaitTime(0.4);

//         console.log(111);

//         GamePlayFunction.LastStepNewCell(_direction);

//     }

//     // 最后一步生成新Cell
//     public static LastStepNewCell(_direction: cc.Vec2): Cell {
//         // TipPanel.Instance.Show("最后一步生成新Cell");

//         let x = randomRangeInt(1, 4)
//         let y = randomRangeInt(1, 4)
//         console.log(`x-y`, x, y);

//         let data =
//         {
//             x: x,
//             y: y,
//             width: MapManager.Instance.cellWidth,
//             elementType: ElementType.Attack,
//             isNew: true,
//             ATK: 8,
//             DEF: 2,
//             HP: 2,
//             minHP: 0,
//             maxHP: 10,
//             level: 1,
//         }
//         let cell = GamePlayFunction.CreateCell(data.x, data.y, data.width, data.elementType, data.isNew, data.ATK, data.DEF, data.HP, data.minHP, data.maxHP, data.level);


//         // let arr = MapManager.Instance.cellList[x][y]

//         // let cell: Cell = MapManager.Instance.cellList[x][y];
//         // console.log(`cellList`, MapManager.Instance.cellList);

//         // console.log(`cell`, cell);

//         return cell;


//         GameManager.Instance.isLastStep = false;

//         GameManager.Instance.currentStep_temp = GameManager.Instance.currentStep_real;
//         GameManager.Instance.currentStep_temp++;

//         // let arr = GamePlayFunction.GetRowArrayOppositeDirectionEmpty(_direction);
//         // 
//         // console.log(`arr`, arr);

//         let cell: Cell = null;
//         // 有空位
//         if (arr.length > 0) {
//             cell = GamePlayFunction.GetLastCell(_direction);

//             GameManager.Instance.newNumber = 0;
//             GamePlayFunction.MoveCells(_direction);
//         }
//         // 没有空位，满了
//         else {
//             // 有操作
//             if (GameManager.Instance.actionNumber_static > 0) {
//                 cell = GamePlayFunction.GetLastCell(_direction);
//                 if (cell == null) {
//                     GamePlayFunction.EndMoveCells(true);
//                 }
//                 else {
//                     GameManager.Instance.newNumber = 0;
//                     GamePlayFunction.MoveCells(_direction);
//                 }
//             }
//             // 没操作
//             else {
//                 GamePlayFunction.EndMoveCells(false);
//             }
//         }

//         return cell;
//     }

//     // 获取生成敌人最后一行
//     public static GetEnemyRowOrCol(_direction: cc.Vec2): Array<Cell> {
//         let return_value: Array<Cell> = [];

//         let lastRowOrCol: Array<Cell> = GamePlayFunction.GetLastRowOrCol(_direction);

//         for (let i = 0; i <= lastRowOrCol.length - 1; i++) {
//             let cell: Cell = lastRowOrCol[i];
//             if (GameManager.Instance.dayNightState == DayNightState.Day) {
//                 if (cell && cell.node && (cell.cellState == CellState.Empty)) {
//                     return_value.push(cell);
//                 }
//             }
//             else if (GameManager.Instance.dayNightState == DayNightState.Night) {
//                 if (cell && cell.node && (cell.cellState == CellState.Empty || (cell.elementType == ElementType.Enemy && cell.level == 1))) {
//                     return_value.push(cell);
//                 }
//             }
//         }

//         return return_value;
//     }

//     public static GetCreateMonsterLevel(_killEnemyNumber: number): number {
//         let return_value = 1;

//         let count = 30;
//         if (_killEnemyNumber % count === 0) {
//             if (_killEnemyNumber / count === 1) {
//                 return_value = 5;
//             }
//             else if (_killEnemyNumber / count === 2) {
//                 return_value = 5;
//             }
//             else if (_killEnemyNumber / count >= 3) {
//                 return_value = 6;
//             }
//         }

//         return return_value;
//     }

//     // 创建最后一个Cell
//     public static GetLastCell(_direction: cc.Vec2): Cell {
//         let cell: Cell = null;

//         let arr: Array<Cell> = [];
//         let randomIndex: number;
//         let borderCell: Cell = null;

//         // // 到达敌人刷新步数
//         // if (GameManager.Instance.currentStep_temp >= GameManager.Instance.nextMonsetStep_warning + GameManager.Instance.nextMonsetStep_appear) {
//         //     arr = GamePlayFunction.GetEnemyRowOrCol(_direction);
//         //     if (arr.length > 0) {
//         //         randomIndex = ShuaiFunction.GetRandomNumber(0, arr.length - 1);
//         //         borderCell = arr[randomIndex];
//         //         let level = GamePlayFunction.GetCreateMonsterLevel(GameManager.Instance.killEnemyNumber);
//         //         // level = 5;
//         //         if (level >= 5) {
//         //             GameManager.Instance.isBossCreate = true;
//         //         }
//         //         cell = GamePlayFunction.CreateEnemy(borderCell.x - _direction.x, borderCell.y - _direction.y, level);
//         //     }
//         // }
//         // else {
//         arr = GamePlayFunction.GetRowArrayOppositeDirectionEmptyAndItem2(_direction);
//         if (arr.length > 0) {
//             randomIndex = ShuaiFunction.GetRandomNumber(0, arr.length - 1);
//             borderCell = arr[randomIndex];
//             if (borderCell.cellState == CellState.Empty) {
//                 cell = GamePlayFunction.CreateOneRandomItemCell(borderCell.x - _direction.x, borderCell.y - _direction.y);
//             }
//             else if (borderCell.cellState == CellState.Normal) {
//                 let data =
//                 {
//                     x: borderCell.x - _direction.x,
//                     y: borderCell.y - _direction.y,
//                     width: MapManager.Instance.cellWidth,
//                     elementType: borderCell.elementType,
//                     isNew: true,
//                     ATK: 2,
//                     DEF: 2,
//                     HP: 2,
//                     minHP: 0,
//                     maxHP: 0,
//                     level: 1,
//                 }
//                 cell = GamePlayFunction.CreateCell(data.x, data.y, data.width, data.elementType, data.isNew, data.ATK, data.DEF, data.HP, data.minHP, data.maxHP, data.level);
//             }
//         }
//         else {

//         }
//         // }

//         return cell;
//     }

//     // 获取某方向最后一行或者一列
//     public static GetLastRowOrCol(_direction: cc.Vec2): Array<Cell> {
//         let array: Array<Cell> = [];

//         let startIndex: number = 0;
//         let endIndex: number = 0;
//         let border: number = 0;
//         if (_direction == ShuaiAPI.Vec2.UP) {
//             startIndex = MapManager.Instance.col_start;
//             endIndex = MapManager.Instance.col_start + MapManager.Instance.col - 1;
//             border = MapManager.Instance.row_start;
//         }
//         else if (_direction == ShuaiAPI.Vec2.DOWN) {
//             startIndex = MapManager.Instance.col_start;
//             endIndex = MapManager.Instance.col_start + MapManager.Instance.col - 1;
//             border = MapManager.Instance.row_start + MapManager.Instance.row - 1;
//         }
//         else if (_direction == ShuaiAPI.Vec2.LEFT) {
//             startIndex = MapManager.Instance.row_start;
//             endIndex = MapManager.Instance.row_start + MapManager.Instance.row - 1;
//             border = MapManager.Instance.col_start + MapManager.Instance.col - 1;
//         }
//         else if (_direction == ShuaiAPI.Vec2.RIGHT) {
//             startIndex = MapManager.Instance.row_start;
//             endIndex = MapManager.Instance.row_start + MapManager.Instance.row - 1;
//             border = MapManager.Instance.col_start;
//         }

//         for (let i = startIndex; i <= endIndex; i++) {
//             let cell: Cell = (_direction == ShuaiAPI.Vec2.LEFT || _direction == ShuaiAPI.Vec2.RIGHT) ? MapManager.Instance.cellList[border][i] : MapManager.Instance.cellList[i][border];
//             array.push(cell);
//         }

//         return array;
//     }

//     public static GetRowArrayOppositeDirectionEmptyAndItem2(_direction: cc.Vec2): Array<Cell> {
//         let array: Array<Cell> = [];

//         let arr = GamePlayFunction.GetLastRowOrCol(_direction);

//         for (let i = 0; i <= arr.length - 1; i++) {
//             let cell: Cell = arr[i];
//             if (cell && cell.node && (cell.cellState == CellState.Empty || ElementFunction.GetItemValue(cell) == 2)) {
//                 array.push(cell);
//             }
//         }

//         return array;
//     }

//     public static GetRowArrayOppositeDirectionEmpty(_direction: cc.Vec2): Array<Cell> {
//         let array: Array<Cell> = [];

//         let arr = GamePlayFunction.GetLastRowOrCol(_direction);

//         for (let i = 0; i <= arr.length - 1; i++) {
//             let cell: Cell = arr[i];
//             if (cell && cell.node && (cell.cellState == CellState.Empty)) {
//                 array.push(cell);
//             }
//         }

//         return array;
//     }

//     //结束移动格子
//     public static EndMoveCells(_isRealAction: boolean = false) {
//         // TipPanel.Instance.Show('滑动结束~~~');

//         GameManager.Instance.isSlide = false;
//         GameManager.Instance.isLastStep = true;
//         GamePlayFunction.ResetAllCells();

//         // 操作成功
//         if (GameManager.Instance.actionNumber_static > 0) {
//             // 步数累加
//             GameManager.Instance.totalStep++;

//             // if (GameManager.Instance.currentStep_real >= GameManager.Instance.nextMonsetStep_warning + GameManager.Instance.nextMonsetStep_appear) 
//             if (GameManager.Instance.isEnemyCreate == true) {
//                 GameManager.Instance.InitNextMonsterStep();
//                 GameManager.Instance.currentStep_real = 0;
//                 GamePlayPanel.Instance.Refresh();
//             }
//             else {
//                 // 白天如果怪物没有快来，不计步数
//                 if (GameManager.Instance.dayNightState == DayNightState.Night ||
//                     GameManager.Instance.dayNightState == DayNightState.Day && GameManager.Instance.currentStep_real >= GameManager.Instance.nextMonsetStep_warning) {
//                     GameManager.Instance.currentStep_real++;
//                     GamePlayPanel.Instance.Refresh_Step();
//                 }
//             }

//             GamePlayPanel.Instance.RefreshMonsterColor();

//             if (GameManager.Instance.dayNightState == DayNightState.Day) {
//                 if (GamePlayFunction.GetIsFull(cc.v2(1, 1)) == true) {
//                     GamePlayFunction.AllCellShake(GameManager.Instance.direction, () => {
//                         GameManager.Instance.ChangeDayNight(DayNightState.Day2Night);

//                         DataManager.Instance.WriteData();
//                         GamePlayPanel.Instance.Refresh();
//                     });
//                 }
//             }
//             else if (GameManager.Instance.dayNightState == DayNightState.Night) {
//                 GameManager.Instance.nightStepnumber_current++;
//                 if (GameManager.Instance.nightStepnumber_current >= GameManager.Instance.nightStepnumber_max) {
//                     GameManager.Instance.ChangeDayNight(DayNightState.Night2Day);
//                 }
//                 GamePlayPanel.Instance.RefreshStepProgress();
//             }
//         }
//         else {
//             if (GameManager.Instance.dayNightState == DayNightState.Day && GamePlayFunction.GetIsFull(cc.v2(1, 1)) == true) {
//                 GamePlayFunction.AllCellShake(GameManager.Instance.direction, () => {
//                     GameManager.Instance.ChangeDayNight(DayNightState.Day2Night);
//                     DataManager.Instance.WriteData();
//                     GamePlayPanel.Instance.Refresh();
//                 });
//             }
//             else {
//                 GamePlayFunction.AllCellShake(GameManager.Instance.direction, () => {

//                 });
//             }
//         }

//         DataManager.Instance.WriteData();
//         GamePlayPanel.Instance.Refresh();
//     }

//     // 获取空地
//     public static GetEmptyCellArray(): Array<Cell> {
//         let array: Array<Cell> = [];

//         for (let x = MapManager.Instance.col_start; x <= MapManager.Instance.col_start + MapManager.Instance.col - 1; x++) {
//             for (let y = MapManager.Instance.row_start; y <= MapManager.Instance.row_start + MapManager.Instance.row - 1; y++) {
//                 let cell: Cell = MapManager.Instance.cellList[x][y];
//                 if (cell && cell.cellState == CellState.Empty) {
//                     array.push(cell);
//                 }
//             }
//         }

//         return array;
//     }

//     // 获取不重复的空位
//     public static GetEmptyPosByDirection(_direction: cc.Vec2): cc.Vec2 {
//         let return_value: cc.Vec2;

//         let arr = GamePlayFunction.GetEmptyCellArray();
//         if (arr.length <= 0) {
//             return null;
//         }

//         return_value = GamePlayFunction.GetPosByDirection(_direction);
//         while (MapManager.Instance.cellList[return_value.x][return_value.y].cellState != CellState.Empty) {
//             return_value = GamePlayFunction.GetPosByDirection(_direction);
//         }

//         return return_value;
//     }

//     // 根据方向获取位置
//     public static GetPosByDirection(_direction: cc.Vec2): cc.Vec2 {
//         let return_value: cc.Vec2 = cc.v2();

//         if (_direction == ShuaiAPI.Vec2.UP) {
//             return_value.x = ShuaiFunction.GetRandomNumber(MapManager.Instance.col_start, MapManager.Instance.col_start + MapManager.Instance.col - 1);
//             return_value.y = MapManager.Instance.row_start;
//         }
//         else if (_direction == ShuaiAPI.Vec2.DOWN) {
//             return_value.x = ShuaiFunction.GetRandomNumber(MapManager.Instance.col_start, MapManager.Instance.col_start + MapManager.Instance.col - 1);
//             return_value.y = MapManager.Instance.row_start + MapManager.Instance.row - 1;
//         }
//         else if (_direction == ShuaiAPI.Vec2.LEFT) {
//             return_value.x = MapManager.Instance.col_start + MapManager.Instance.col - 1;
//             return_value.y = ShuaiFunction.GetRandomNumber(MapManager.Instance.row_start, MapManager.Instance.row_start + MapManager.Instance.row - 1);
//         }
//         else if (_direction == ShuaiAPI.Vec2.RIGHT) {
//             return_value.x = MapManager.Instance.col_start;
//             return_value.y = ShuaiFunction.GetRandomNumber(MapManager.Instance.row_start, MapManager.Instance.row_start + MapManager.Instance.row - 1);
//         }

//         return return_value;
//     }

//     // 重置Cell部分属性
//     public static ResetAllCells() {
//         for (let x = 0; x <= MapManager.Instance.col_total - 1; x++) {
//             for (let y = 0; y <= MapManager.Instance.row_total - 1; y++) {
//                 let cell: Cell = MapManager.Instance.cellList[x][y];
//                 if (cell && cell.node) {
//                     cell.moveNumber = 0;
//                     cell.pickupNumber = 0;
//                     cell.battleNumber = 0;
//                     cell.shakeNumber = 0;
//                 }
//             }
//         }

//         GamePlayFunction.ResetWalls();
//     }

//     public static CheckX(_x): boolean {
//         if (_x >= 0 && _x <= MapManager.Instance.col_total - 1) {
//             return true;
//         }
//         else {
//             return false;
//         }
//     }

//     public static CheckY(_y): boolean {
//         if (_y >= 0 && _y <= MapManager.Instance.row_total - 1) {
//             return true;
//         }
//         else {
//             return false;
//         }
//     }

//     public static CheckXY(_x, _y): boolean {
//         if (GamePlayFunction.CheckX(_x) && GamePlayFunction.CheckX(_y)) {
//             return true;
//         }
//         else {
//             return false;
//         }
//     }

//     public static GetEmptyCount() {
//         let return_value;

//         return return_value;
//     }

//     // 横竖向是否满格并且不能合成
//     public static GetIsFull(_direction: cc.Vec2) {
//         let return_value = true;

//         for (let x = MapManager.Instance.col_start; x <= MapManager.Instance.col_start + MapManager.Instance.col - 1; x++) {
//             for (let y = MapManager.Instance.row_start; y <= MapManager.Instance.row_start + MapManager.Instance.row - 1; y++) {
//                 let cell: Cell = MapManager.Instance.cellList[x][y];
//                 if (cell.cellState == CellState.Empty) {
//                     return false;
//                 }
//                 else {
//                     let cell_up: Cell = GamePlayFunction.GetCell(x, y + 1);
//                     let cell_down: Cell = GamePlayFunction.GetCell(x, y - 1);
//                     let cell_left: Cell = GamePlayFunction.GetCell(x - 1, y);
//                     let cell_right: Cell = GamePlayFunction.GetCell(x + 1, y);
//                     // 竖向是否满格并且不能合成
//                     if (_direction.y != 0) {
//                         if (cell_up.cellState == CellState.Normal && ElementFunction.IsEqualValue(cell, cell_up)) {
//                             return false;
//                         }
//                         if (cell_down.cellState == CellState.Normal && ElementFunction.IsEqualValue(cell, cell_down)) {
//                             return false;
//                         }
//                     }
//                     // 横向是否满格并且不能合成
//                     if (_direction.x != 0) {
//                         if (cell_left.cellState == CellState.Normal && ElementFunction.IsEqualValue(cell, cell_left)) {
//                             return false;
//                         }
//                         if (cell_right.cellState == CellState.Normal && ElementFunction.IsEqualValue(cell, cell_right)) {
//                             return false;
//                         }
//                     }
//                 }
//             }
//         }

//         return return_value;
//     }

//     //通过x和y获得一个指定Cell
//     public static GetCell(x: number, y: number): Cell {
//         let cell: Cell = null;

//         if (MapManager.Instance.cellList && MapManager.Instance.cellList.length > 0) {
//             if (x >= 0 && x <= MapManager.Instance.col_total - 1 &&
//                 y >= 0 && y <= MapManager.Instance.row_total - 1) {
//                 cell = MapManager.Instance.cellList[x][y];
//             }
//         }

//         return cell;
//     }

//     // 获取怪物步数
//     public static GetNextMonsetStep(): any {
//         let return_value: any = {
//             nextMonsetStep_warning: 0,
//             nextMonsetStep_appear: 0,
//         };

//         if (GamePlayFunction.IsHaveBoss() === true) {
//             return_value.nextMonsetStep_warning = Number.MAX_VALUE;
//             return_value.nextMonsetStep_appear = Number.MAX_VALUE;
//         }
//         else {
//             // return_value.nextMonsetStep_warning = ShuaiFunction.GetRandomNumber(4, 4);
//             // return_value.nextMonsetStep_appear = ShuaiFunction.GetRandomNumber(1, 1);

//             return_value.nextMonsetStep_warning = ShuaiFunction.GetRandomNumber(8, 11);
//             return_value.nextMonsetStep_appear = ShuaiFunction.GetRandomNumber(1, 4);
//         }

//         return return_value;
//     }

//     // 所有Cell晃动
//     public static AllCellShake(_direction, _callback = null): any {
//         AudioManager.Instance.lock.play();
//         let shakeCount = 0;
//         let shakeNumber = MapManager.Instance.row * MapManager.Instance.col;
//         for (let x = MapManager.Instance.col_start; x <= MapManager.Instance.col_start + MapManager.Instance.col - 1; x++) {
//             for (let y = MapManager.Instance.row_start; y <= MapManager.Instance.row_start + MapManager.Instance.row - 1; y++) {
//                 let cell: Cell = MapManager.Instance.cellList[x][y];
//                 cell.Shake(_direction, () => {
//                     shakeCount++;
//                     if (shakeCount >= shakeNumber) {
//                         if (_callback) {
//                             _callback();
//                         }
//                     }
//                 });
//             }
//         }
//     }

//     // 设置所有Cell白天黑夜
//     public static ChangeAllCellDayNight(): any {
//         for (let x = MapManager.Instance.col_start; x <= MapManager.Instance.col_start + MapManager.Instance.col - 1; x++) {
//             for (let y = MapManager.Instance.row_start; y <= MapManager.Instance.row_start + MapManager.Instance.row - 1; y++) {
//                 let cell: Cell = MapManager.Instance.cellList[x][y];
//                 if (cell && cell.node) {
//                     cell.ChangeDayNight();
//                 }
//             }
//         }
//     }

//     // 重置所有墙
//     public static ResetWalls() {
//         for (let x = 0; x <= MapManager.Instance.col_total - 1; x++) {
//             for (let y = 0; y <= MapManager.Instance.row_total - 1; y++) {
//                 if (x <= MapManager.Instance.col_start - 1 || x >= MapManager.Instance.col_total - MapManager.Instance.col_end || y <= MapManager.Instance.row_start - 1 || y >= MapManager.Instance.row_total - MapManager.Instance.row_end) {
//                     let cell: Cell = GamePlayFunction.GetCell(x, y);
//                     if (cell == null || cell.cellState != CellState.Wall) {
//                         GamePlayFunction.ClearOneCell(x, y);
//                         GamePlayFunction.CreateWallCell(x, y, MapManager.Instance.cellWidth);
//                     }
//                 }
//             }
//         }
//     }

//     // 获取玩家Cell
//     public static GetPlayerCell(): Cell {
//         for (let x = MapManager.Instance.col_start; x <= MapManager.Instance.col_start + MapManager.Instance.col - 1; x++) {
//             for (let y = MapManager.Instance.row_start; y <= MapManager.Instance.row_start + MapManager.Instance.row - 1; y++) {
//                 let cell: Cell = GamePlayFunction.GetCell(x, y);
//                 if (cell && cell.elementType === ElementType.Player) {
//                     return cell;
//                 }
//             }
//         }

//         return null;
//     }

//     // 获取所有怪物Cell
//     public static GetAllMonsterCellArray(): Array<Cell> {
//         let return_value: Array<Cell> = [];

//         for (let x = MapManager.Instance.col_start; x <= MapManager.Instance.col_start + MapManager.Instance.col - 1; x++) {
//             for (let y = MapManager.Instance.row_start; y <= MapManager.Instance.row_start + MapManager.Instance.row - 1; y++) {
//                 let cell: Cell = GamePlayFunction.GetCell(x, y);
//                 if (cell && cell.elementType === ElementType.Enemy) {
//                     return_value.push(cell);
//                 }
//             }
//         }

//         return return_value;
//     }

//     // 是否有boss
//     public static IsHaveBoss(): boolean {
//         let monsterArray = GamePlayFunction.GetAllMonsterCellArray();
//         if (monsterArray.length <= 0) {
//             return false;
//         }

//         for (let index = 0; index <= monsterArray.length - 1; index++) {
//             let cell: Cell = monsterArray[index];
//             if (cell.isBoss === true) {
//                 return true;
//             }
//         }

//         return false;
//     }

//     public static GetRandomSkillIndex(): number {
//         let return_value = null;

//         let array = [];
//         for (let index = 0; index <= DataManager.Instance.skillConfigVo.length - 1; index++) {
//             let skillVo = DataManager.Instance.skillConfigVo[index];
//             if (skillVo.count_current < skillVo.count_max) {
//                 array.push(index);
//             }
//         }

//         if (array.length > 0) {
//             let randomIndex = ShuaiFunction.GetRandomNumber(0, array.length - 1);
//             return_value = array[randomIndex];
//         }

//         // DEBUG
//         return_value = ShuaiFunction.GetRandomNumber(0, 2);

//         return return_value;
//     }

// }
